package com.example.service.impl;


import com.example.dao.OrderSettingDao;
import com.example.domain.pojo.OrderSetting;
import com.example.service.OrderSettingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

@Service
@Transactional
public class OrderSettingServiceimpl implements OrderSettingService {
    //注入dao
    @Autowired
    private OrderSettingDao orderSettingDao;

    //如果数据库中已经有对应日期的数据,需要更新原数据,更新数量,没有设置过,需要添加数据
    //添加预约
    @Override
    public void add(List<OrderSetting> list) {
        //1:遍历数组,逐一判断数据
        for (OrderSetting orderSetting : list) {
            editOrdersetting(orderSetting);
        }
    }

    //将方法抽取出来 根据日期修改预约人数
    private void editOrdersetting(OrderSetting orderSetting) {
        //1:判断日期是否存在,存在,执行更新操作,但是原有数据和现有数据万一冲突,怎么知道是否冲突,怎么更新操作
        Long count = orderSettingDao.findDateIsExist(orderSetting.getOrderDate());
        //2:日期存在
        if(count>0){
            //2.1执行更新操作:根究日期修改预约人数,但是存在原来的删除,新增的
            orderSettingDao.editOrderSettingByDate(orderSetting);
        }else {
            //3:日期不存在,执行添加日期操作
            orderSettingDao.add(orderSetting);
        }
    }




    //查询预约情况
    @Override
    public  List<Map> findAllBymonth(String date) {
        //1:刷新页面,显示那天的数据
        if(date!=null&&date.length()>0) {

           //2:将字符串拼接到具体每一年每一个月的样式 2019-1-1  2019-1-31 查询这个期间的数据
            String start=date+"-1";
            String end=date+"-31";


            //3:将开始日期和结束日期封装为map集合
            Map<String,String> map=new HashMap<>();
            map.put("start",start);
            map.put("end",end);
            //将一个月查询出来的ordersetting封装到list集合
            List<OrderSetting> byDate = orderSettingDao.findByDate(map);

            /*
            前端需要的数据类型
            { date: 1, number: 120, reservations: 1 },
            { date: 3, number: 120, reservations: 1 },
            */
            //创建list集合,用户封装返回的list集合
            List<Map> list=new ArrayList<>();
            //遍历查询到的list集合,前端需要第几天,需要将日期号转换为data,截取日期最后一个
            for (OrderSetting orderSetting : byDate) {
                Map hashMap=new HashMap<>();
                Date days = orderSetting.getOrderDate();
                //获取日期号
                int day = days.getDay();
                hashMap.put("date",day);
                hashMap.put("number",orderSetting.getNumber());
                hashMap.put("reservations",orderSetting.getReservations());
                //将map集合存储到list集合中
                list.add(hashMap);
            }
            return list;

        }
        return null;
    }

    //编辑可预约人数
    @Override
    public void deitNumberByDate(OrderSetting orderSetting) {
        //根据传递的时间日期,修改可预约人数
        editOrdersetting(orderSetting);
    }

}
